// SPDX-License-Identifier: GPL-2.0-or-later
// Copyright (c) 2023 Yevhen Babiichuk (DustDFG)

#ifndef _DOT_SORT_GAME_RULES_TUBE_SET_HPP_
#define _DOT_SORT_GAME_RULES_TUBE_SET_HPP_

#include <vector>
#include <cstdint>

#include <DotSort/GameRules/Tube.hpp>

class TubeSet
{
	private:
		std::vector<Tube> tubes;

	public:
		TubeSet(uint8_t tubeSize, uint8_t tubeCount);

		const uint8_t tubeSize;
		const uint8_t tubeCount;

		bool isPossibleStep(uint8_t t1, uint8_t t2) const;
		void doStep(uint8_t t1, uint8_t t2);

		const std::vector<uint8_t>& getTube(uint8_t tubeIndex) const;

		friend class TubeSetBuilder;
};

#endif
